<!DOCTYPE html>
<script src="../../../resources/js-test.js"></script>
<style type="text/css">
    html, body, .workspace {
        height: 100%;
    }
    button {
        cursor: pointer;
        padding: 0px;
        margin: 0px;
    }
    .minbox {
        height: 30px;
        width: 1px;
    }
#div1, #div2 {
    height: 80px;
    border: 1px solid #aaaaaa;
}
</style>
<body>
<div class="workspace"></div>
<div class="minbox">
    <div id="test">
        <button>POINTER</button>
    </div>
</div>
<p id="description"></p>
<div id="console"></div>
<script>
    var events = [];
    var targets = [];

    window.scrollTo(0, 200);

    // A position over to the right of <button> and #test.
    var button = document.getElementById("test").children[0];
    var x = button.getBoundingClientRect().right + 1;
    var y = button.getBoundingClientRect().top;

    if (window.eventSender) {
        function appendEventLog(e) {
            events.push(e.type);
            targets.push(e.currentTarget.nodeName);
        }
 
        function runNextTest(eventType1, eventType2)
        {
            document.addEventListener(eventType1, appendEventLog);
            document.body.addEventListener(eventType1, appendEventLog);
            document.addEventListener(eventType2, appendEventLog);
            document.body.addEventListener(eventType2, appendEventLog);
            eventSender.mouseMoveTo(x, y);       // html element in iframe
            eventSender.mouseMoveTo(x, y + 200); // out of iframe
            eventSender.mouseMoveTo(x, y - 100); // body element in iframe
            eventSender.mouseMoveTo(x, y + 200); // out of iframe
            document.removeEventListener(eventType1, appendEventLog);
            document.body.removeEventListener(eventType1, appendEventLog);
            document.removeEventListener(eventType2, appendEventLog);
            document.body.removeEventListener(eventType2, appendEventLog);
        }
        runNextTest('mousemove', '');
        runNextTest('mouseover', '');
        runNextTest('mouseout', '');
        runNextTest('mouseenter', 'mouseleave');
    }
    var i = 0;
    function verifyEventLog(eventType, target)
    {
        shouldBeEqualToString('events[' + i + ']', eventType);
        shouldBeEqualToString('targets[' + i + ']', target);
        i++;
    }
    verifyEventLog('mousemove', '#document'); // x, y
    verifyEventLog('mousemove', 'BODY');      // x, y - 100
    verifyEventLog('mousemove', '#document'); // x, y - 100
    verifyEventLog('mouseover', '#document'); // x, y
    verifyEventLog('mouseover', 'BODY');      // x, y - 100
    verifyEventLog('mouseover', '#document'); // x, y - 100
    verifyEventLog('mouseout', '#document');  // x, y
    verifyEventLog('mouseout', 'BODY');       // x, y - 100
    verifyEventLog('mouseout', '#document');  // x, y - 100
    verifyEventLog('mouseenter', '#document');// x, y
    verifyEventLog('mouseleave', '#document');// x, y
    verifyEventLog('mouseenter', '#document');// x, y - 100
    verifyEventLog('mouseenter', 'BODY');     // x, y - 100
    verifyEventLog('mouseleave', 'BODY');     // x, y + 200
    verifyEventLog('mouseleave', '#document');// x, y + 200
</script>
</body>
